// 从 NestJS 公共模块导入 Module 装饰器、MiddlewareConsumer 和 RequestMethod，用于定义模块、配置中间件和指定请求方法
import { Module, MiddlewareConsumer, RequestMethod } from '@nestjs/common';
// 从 NestJS 核心模块导入 APP_FILTER 和 APP_GUARD，用于全局过滤器和守卫的注入令牌
import { APP_FILTER, APP_GUARD } from '@nestjs/core';
// 导入日志中间件
import { LoggerMiddleware } from './common/middleware/logger.middleware';
// 导入 HTTP 异常过滤器
import { HttpExceptionFilter } from './common/filter/http-exception.filter';
// 导入认证守卫
import { AuthGuard } from './common/guard/auth.guard';
// 导入用户模块
import { UsersModule } from './users/users.module';
// 导入帖子模块
import { PostsModule } from './posts/posts.module';

/**
 * 应用主模块，负责整合所有子模块，配置全局过滤器、守卫和中间件
 */
@Module({
  // 导入其他模块，使当前模块可以使用这些模块提供的功能
  imports: [UsersModule, PostsModule],
  // 定义当前模块的提供者（如服务、过滤器、守卫等）
  providers: [
    {
      // 提供全局过滤器的注入令牌
      provide: APP_FILTER,
      // 使用 HttpExceptionFilter 作为全局过滤器
      useClass: HttpExceptionFilter,
    },
    {
      // 提供全局守卫的注入令牌
      provide: APP_GUARD,
      // 使用 AuthGuard 作为全局守卫
      useClass: AuthGuard,
    },
  ],
})
export class AppModule {
  /**
   * 配置中间件
   * @param consumer - 中间件消费者，用于注册中间件
   */
  configure(consumer: MiddlewareConsumer) {
    // 应用 LoggerMiddleware 中间件
    consumer
      .apply(LoggerMiddleware)
      // 对所有路径和所有请求方法应用中间件
      .forRoutes({ path: '*', method: RequestMethod.ALL });
  }
}